Results
sim_lu %>%
filter(lineup<=3) %>%
arrange(lineup, position, desc(pts_pred)) %>%
knitr::kable() %>%
kable_styling() %>%
column_spec(1, bold=TRUE) %>%
collapse_rows(columns = 1, valign = 'top')
|
lineup
|
Name
|
team
|
position
|
pts_base
|
pts_pred
|
sd_pts
|
Salary
|
|
1
|
Cam Newton
|
NEP
|
QB
|
24.36100
|
26.826575
|
1.8280458
|
7700
|
|
Miles Sanders
|
PHI
|
RB
|
16.56000
|
17.143147
|
1.0414882
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.04500
|
16.097661
|
0.1630860
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.51099
|
14.867883
|
0.2342791
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
17.70000
|
18.648671
|
1.1267760
|
8500
|
|
Calvin Ridley
|
ATL
|
WR
|
15.98500
|
16.512140
|
1.8977280
|
8000
|
|
Darius Slayton
|
NYG
|
WR
|
12.08000
|
12.551311
|
1.6012080
|
5500
|
|
Zach Ertz
|
PHI
|
TE
|
10.71500
|
10.548818
|
0.2372160
|
6200
|
|
Carolina Panthers
|
CAR
|
DST
|
6.07500
|
9.371659
|
1.7791200
|
3500
|
|
2
|
Kyler Murray
|
ARI
|
QB
|
24.97400
|
24.837174
|
0.9636900
|
8400
|
|
Miles Sanders
|
PHI
|
RB
|
16.56000
|
17.634572
|
1.0414882
|
7400
|
|
David Johnson
|
HOU
|
RB
|
11.29750
|
16.160706
|
2.6983320
|
6900
|
|
Jonathan Taylor
|
IND
|
RB
|
16.04500
|
15.885759
|
0.1630860
|
6700
|
|
DeAndre Hopkins
|
ARI
|
WR
|
17.70000
|
18.797947
|
1.1267760
|
8500
|
|
DK Metcalf
|
SEA
|
WR
|
13.78743
|
14.094513
|
1.9571002
|
6500
|
|
N’Keal Harry
|
NEP
|
WR
|
8.95000
|
11.719869
|
3.7361520
|
5300
|
|
Darren Waller
|
LVR
|
TE
|
10.66893
|
12.759700
|
2.3440979
|
6600
|
|
Houston Texans
|
HOU
|
DST
|
6.10000
|
8.422297
|
1.1860800
|
3600
|
|
3
|
Kyler Murray
|
ARI
|
QB
|
24.97400
|
25.130595
|
0.9636900
|
8400
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.18000
|
19.196092
|
0.3085588
|
9000
|
|
Jonathan Taylor
|
IND
|
RB
|
16.04500
|
15.979572
|
0.1630860
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.51099
|
14.438728
|
0.2342791
|
6500
|
|
Calvin Ridley
|
ATL
|
WR
|
15.98500
|
16.692310
|
1.8977280
|
8000
|
|
Tyler Lockett
|
SEA
|
WR
|
13.62361
|
14.012778
|
0.7157616
|
6800
|
|
Darius Slayton
|
NYG
|
WR
|
12.08000
|
12.203998
|
1.6012080
|
5500
|
|
Jordan Reed
|
SFO
|
TE
|
9.75250
|
9.789776
|
0.2075640
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.80000
|
8.019521
|
0.1482600
|
3800
|
ggplotly(sim_lu %>%
group_by(Name, position, Salary) %>%
dplyr::summarize(lu = n_distinct(lineup)) %>%
ungroup() %>%
group_by(position) %>%
top_n(10, lu) %>%
ungroup() %>%
arrange(position, desc(lu)) %>%
mutate(Name = factor(Name),
Name = fct_reorder(Name, lu),
pct = round(lu / n_sims, 3) * 100) %>%
ggplot(aes(x = Name, y = pct, fill = Salary,
text = paste(Name, "in", lu, "lineups with", Salary, "salary"))) +
geom_bar(stat = "identity") +
facet_wrap(~position, ncol = 2, scales = "free_y") +
coord_flip() +
scale_fill_viridis_c() +
xlab("") +
ylab("Lineups (thousands)") +
ggtitle("Top 10 Players By Position")) %>%
ggplotly(tooltip = "text")
plyr_lu <- sim_lu %>%
group_by(Name, position) %>%
dplyr::summarize(lu=n_distinct(lineup)) %>%
ungroup()
ggplotly(projections %>%
filter(avg_type=='weighted') %>%
mutate(Name = ifelse(pos=="DST", last_name, paste(first_name, last_name))) %>%
inner_join(fan_duel, by = c("Name", "position")) %>%
select(Name, team, position, points, Salary, sd_pts) %>%
left_join(plyr_lu, by='Name') %>%
replace_na(list(lu=0)) %>%
mutate(lu_bin=ifelse(lu==0, '0 Lineups', '>=1 Lineups'),
lu_5=cut(lu,5, labels = FALSE)) %>%
ggplot(aes(x=Salary, y=points, color=lu_bin, size=sd_pts, text=Name)) +
geom_point() +
theme_minimal() +
scale_color_manual(values = c('red', 'blue'), name="") +
geom_smooth(inherit.aes = FALSE, aes(x=Salary, y=points), method = 'lm') +
ylab('Projected Points') +
xlab('Salary') +
ggtitle('Who makes it into Optimized Lineups?') +
scale_x_continuous(labels=scales::dollar))
sim_lu %>%
group_by(lineup) %>%
mutate(lineup_pts=sum(pts_pred)) %>%
group_by(lineup, position) %>%
mutate(n = n()) %>%
select(lineup, position, n, lineup_pts) %>%
distinct() %>%
spread(key=position, value=n) %>%
filter(RB >= 2, TE >= 1, WR >= 3) %>%
mutate(flex = case_when(RB==3 ~ 'RB',
TE==2 ~ 'TE',
WR==4 ~ 'WR')) %>%
group_by(flex) %>%
dplyr::summarize(median_pts = round(median(lineup_pts), 3),
cases = n()) %>%
knitr::kable() %>%
kable_styling(full_width = FALSE)
|
flex
|
median_pts
|
cases
|
|
RB
|
141.072
|
9584
|
|
WR
|
143.601
|
416
|
lu_df <- sim_lu %>%
group_by(lineup) %>%
dplyr::summarize(lineup_pts=sum(pts_pred),
lineup_sd=sum(sd_pts)) %>%
ungroup()
pto <- psel(lu_df, low(lineup_sd) * high(lineup_pts))
ggplot(lu_df, aes(y=lineup_pts, x=lineup_sd)) +
geom_point() +
geom_point(data=pto, size=5) +
ylab('Lineup Points') +
xlab('Lineup Points St Dev') +
ggtitle('Lineup Points vs Uncertainty',
subtitle = 'Pareto Lineups Bolded')

psel(lu_df, low(lineup_sd) * high(lineup_pts)) %>%
left_join(sim_lu, by='lineup') %>%
group_by(lineup) %>%
arrange(lineup_pts, position, desc(Salary)) %>%
select(lineup, lineup_pts, lineup_sd, Name, team, position, pts_pred, sd_pts, Salary) %>%
mutate_at(vars(lineup_pts, lineup_sd, pts_pred, sd_pts), function(x) round(x, 2)) %>%
knitr::kable() %>%
kable_styling(fixed_thead = T) %>%
column_spec(1:3, bold=TRUE) %>%
collapse_rows(columns = 1:3, valign = 'top') %>%
scroll_box(height = '700px', width = '100%')
|
lineup
|
lineup_pts
|
lineup_sd
|
Name
|
team
|
position
|
pts_pred
|
sd_pts
|
Salary
|
|
5042
|
136.81
|
4.80
|
Kyler Murray
|
ARI
|
QB
|
25.86
|
0.96
|
8400
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.68
|
0.31
|
9000
|
|
Jonathan Taylor
|
IND
|
RB
|
16.16
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.72
|
0.23
|
6500
|
|
Amari Cooper
|
DAL
|
WR
|
13.66
|
0.27
|
7000
|
|
Julian Edelman
|
NEP
|
WR
|
13.59
|
0.55
|
6500
|
|
DK Metcalf
|
SEA
|
WR
|
14.81
|
1.96
|
6500
|
|
Jordan Reed
|
SFO
|
TE
|
10.19
|
0.21
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
8.15
|
0.15
|
3800
|
|
8642
|
137.75
|
4.88
|
Kyler Murray
|
ARI
|
QB
|
25.06
|
0.96
|
8400
|
|
Miles Sanders
|
PHI
|
RB
|
17.27
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.29
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.72
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
19.04
|
1.13
|
8500
|
|
Amari Cooper
|
DAL
|
WR
|
13.60
|
0.27
|
7000
|
|
Julian Edelman
|
NEP
|
WR
|
14.18
|
0.55
|
6500
|
|
Dallas Goedert
|
PHI
|
TE
|
9.74
|
0.38
|
5200
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.85
|
0.15
|
3800
|
|
6454
|
138.49
|
5.21
|
Kyler Murray
|
ARI
|
QB
|
26.33
|
0.96
|
8400
|
|
Austin Ekeler
|
LAC
|
RB
|
17.00
|
1.10
|
7500
|
|
Jonathan Taylor
|
IND
|
RB
|
16.04
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.46
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.00
|
1.13
|
8500
|
|
Tyler Lockett
|
SEA
|
WR
|
14.98
|
0.72
|
6800
|
|
Julian Edelman
|
NEP
|
WR
|
13.88
|
0.55
|
6500
|
|
Jordan Reed
|
SFO
|
TE
|
9.80
|
0.21
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
8.00
|
0.15
|
3800
|
|
7663
|
140.54
|
5.42
|
Kyler Murray
|
ARI
|
QB
|
26.62
|
0.96
|
8400
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.07
|
0.31
|
9000
|
|
Miles Sanders
|
PHI
|
RB
|
18.94
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.13
|
0.16
|
6700
|
|
Amari Cooper
|
DAL
|
WR
|
13.86
|
0.27
|
7000
|
|
Tyler Lockett
|
SEA
|
WR
|
13.88
|
0.72
|
6800
|
|
Darius Slayton
|
NYG
|
WR
|
14.26
|
1.60
|
5500
|
|
Jordan Reed
|
SFO
|
TE
|
10.09
|
0.21
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.68
|
0.15
|
3800
|
|
9170
|
141.96
|
5.46
|
Cam Newton
|
NEP
|
QB
|
28.56
|
1.83
|
7700
|
|
Derrick Henry
|
TEN
|
RB
|
17.78
|
0.26
|
8200
|
|
Jonathan Taylor
|
IND
|
RB
|
16.14
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.30
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
20.41
|
1.13
|
8500
|
|
Terry McLaurin
|
WAS
|
WR
|
13.79
|
0.93
|
6700
|
|
Julian Edelman
|
NEP
|
WR
|
13.33
|
0.55
|
6500
|
|
Jordan Reed
|
SFO
|
TE
|
9.85
|
0.21
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.80
|
0.15
|
3800
|
|
5463
|
142.17
|
6.06
|
Kyler Murray
|
ARI
|
QB
|
27.39
|
0.96
|
8400
|
|
Miles Sanders
|
PHI
|
RB
|
18.99
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.10
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.47
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.54
|
1.13
|
8500
|
|
Amari Cooper
|
DAL
|
WR
|
13.73
|
0.27
|
7000
|
|
Tyler Lockett
|
SEA
|
WR
|
13.85
|
0.72
|
6800
|
|
Jordan Reed
|
SFO
|
TE
|
9.99
|
0.21
|
5300
|
|
Cincinnati Bengals
|
CIN
|
DST
|
9.11
|
1.33
|
3300
|
|
7325
|
142.40
|
6.56
|
Kyler Murray
|
ARI
|
QB
|
26.75
|
0.96
|
8400
|
|
Miles Sanders
|
PHI
|
RB
|
16.92
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
15.81
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.15
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
19.10
|
1.13
|
8500
|
|
Tyler Lockett
|
SEA
|
WR
|
14.83
|
0.72
|
6800
|
|
DK Metcalf
|
SEA
|
WR
|
17.31
|
1.96
|
6500
|
|
Jordan Reed
|
SFO
|
TE
|
9.77
|
0.21
|
5300
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.76
|
0.15
|
3800
|
|
825
|
144.81
|
6.82
|
Cam Newton
|
NEP
|
QB
|
26.54
|
1.83
|
7700
|
|
Derrick Henry
|
TEN
|
RB
|
17.95
|
0.26
|
8200
|
|
Jonathan Taylor
|
IND
|
RB
|
16.07
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.58
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.62
|
1.13
|
8500
|
|
Tyler Lockett
|
SEA
|
WR
|
13.85
|
0.72
|
6800
|
|
DK Metcalf
|
SEA
|
WR
|
20.11
|
1.96
|
6500
|
|
Dallas Goedert
|
PHI
|
TE
|
9.43
|
0.38
|
5200
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.66
|
0.15
|
3800
|
|
9769
|
146.10
|
7.07
|
Cam Newton
|
NEP
|
QB
|
26.78
|
1.83
|
7700
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.59
|
0.31
|
9000
|
|
Jonathan Taylor
|
IND
|
RB
|
16.09
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.92
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.79
|
1.13
|
8500
|
|
Tyler Lockett
|
SEA
|
WR
|
14.28
|
0.72
|
6800
|
|
Darius Slayton
|
NYG
|
WR
|
17.18
|
1.60
|
5500
|
|
T.J. Hockenson
|
DET
|
TE
|
10.61
|
0.94
|
5400
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.87
|
0.15
|
3800
|
|
1525
|
146.73
|
7.96
|
Cam Newton
|
NEP
|
QB
|
27.86
|
1.83
|
7700
|
|
Derrick Henry
|
TEN
|
RB
|
17.57
|
0.26
|
8200
|
|
Jonathan Taylor
|
IND
|
RB
|
15.96
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.49
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.31
|
1.13
|
8500
|
|
DK Metcalf
|
SEA
|
WR
|
18.05
|
1.96
|
6500
|
|
Michael Gallup
|
DAL
|
WR
|
13.23
|
0.85
|
5700
|
|
Jordan Reed
|
SFO
|
TE
|
10.05
|
0.21
|
5300
|
|
Pittsburgh Steelers
|
PIT
|
DST
|
11.21
|
1.33
|
4700
|
|
1288
|
147.42
|
8.27
|
Kyler Murray
|
ARI
|
QB
|
25.84
|
0.96
|
8400
|
|
Miles Sanders
|
PHI
|
RB
|
17.04
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
15.75
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
14.39
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
20.93
|
1.13
|
8500
|
|
Calvin Ridley
|
ATL
|
WR
|
20.88
|
1.90
|
8000
|
|
Darius Slayton
|
NYG
|
WR
|
14.21
|
1.60
|
5500
|
|
Jordan Reed
|
SFO
|
TE
|
9.76
|
0.21
|
5300
|
|
New York Giants
|
NYG
|
DST
|
8.63
|
1.04
|
3600
|
|
341
|
149.64
|
8.88
|
Cam Newton
|
NEP
|
QB
|
27.24
|
1.83
|
7700
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.70
|
0.31
|
9000
|
|
Austin Ekeler
|
LAC
|
RB
|
18.06
|
1.10
|
7500
|
|
Jonathan Taylor
|
IND
|
RB
|
16.09
|
0.16
|
6700
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.89
|
1.13
|
8500
|
|
DK Metcalf
|
SEA
|
WR
|
16.87
|
1.96
|
6500
|
|
Darius Slayton
|
NYG
|
WR
|
15.27
|
1.60
|
5500
|
|
Jordan Reed
|
SFO
|
TE
|
10.14
|
0.21
|
5300
|
|
Atlanta Falcons
|
ATL
|
DST
|
7.38
|
0.59
|
3200
|
|
5844
|
150.32
|
9.07
|
Cam Newton
|
NEP
|
QB
|
26.38
|
1.83
|
7700
|
|
Derrick Henry
|
TEN
|
RB
|
17.84
|
0.26
|
8200
|
|
Miles Sanders
|
PHI
|
RB
|
17.78
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.01
|
0.16
|
6700
|
|
DeAndre Hopkins
|
ARI
|
WR
|
19.38
|
1.13
|
8500
|
|
DK Metcalf
|
SEA
|
WR
|
18.00
|
1.96
|
6500
|
|
Darius Slayton
|
NYG
|
WR
|
15.86
|
1.60
|
5500
|
|
T.J. Hockenson
|
DET
|
TE
|
11.08
|
0.94
|
5400
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.99
|
0.15
|
3800
|
|
6253
|
153.74
|
9.20
|
Cam Newton
|
NEP
|
QB
|
27.19
|
1.83
|
7700
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.72
|
0.31
|
9000
|
|
Jonathan Taylor
|
IND
|
RB
|
16.06
|
0.16
|
6700
|
|
Kenyan Drake
|
ARI
|
RB
|
15.12
|
0.23
|
6500
|
|
DeAndre Hopkins
|
ARI
|
WR
|
18.99
|
1.13
|
8500
|
|
Tyler Lockett
|
SEA
|
WR
|
14.75
|
0.72
|
6800
|
|
N’Keal Harry
|
NEP
|
WR
|
23.57
|
3.74
|
5300
|
|
T.J. Hockenson
|
DET
|
TE
|
10.57
|
0.94
|
5400
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.77
|
0.15
|
3800
|
|
4778
|
153.79
|
13.07
|
Cam Newton
|
NEP
|
QB
|
25.30
|
1.83
|
7700
|
|
Ezekiel Elliott
|
DAL
|
RB
|
19.46
|
0.31
|
9000
|
|
Miles Sanders
|
PHI
|
RB
|
17.96
|
1.04
|
7400
|
|
Jonathan Taylor
|
IND
|
RB
|
16.04
|
0.16
|
6700
|
|
Calvin Ridley
|
ATL
|
WR
|
18.71
|
1.90
|
8000
|
|
Darius Slayton
|
NYG
|
WR
|
16.32
|
1.60
|
5500
|
|
N’Keal Harry
|
NEP
|
WR
|
14.84
|
3.74
|
5300
|
|
Darren Waller
|
LVR
|
TE
|
17.36
|
2.34
|
6600
|
|
Tampa Bay Buccaneers
|
TBB
|
DST
|
7.81
|
0.15
|
3800
|